如何在markdown中使用Vue
在vitepress环境中,每个md文件都会编译为html,然后渲染成单文件组件 Vue Single-File Component. 这意味着可以在md文件中直接使用vue的特性(dynamic templating,、Vue components、use arbitrary in-page Vue component logic by adding a <script>
tag)
值得注意的是,VitePress利用Vue的编译器自动检测和优化Markdown内容中的纯静态部分。静态内容被优化为单个占位符节点,并从页面的JavaScript有效载荷中消除以便于初始访问。它们也在客户端激活 (client-side hydration) 期间被忽略。简而言之,在任何给定页面上,您只需关心动态部分。
直接使用vue模板语法,无需引入其他内容:
<span v-for="i in 3">{{ i }} <br></span>
{{ 1 + 99999991 }}
<span v-for="i in 3">{{ i }} <br></span>
{{ 1 + 99999991 }}
script 和 style 标签
Markdown 文件中的根级 <script>
和 <style>
标签的工作方式与 Vue SFC 中的标签相同,包括 <script setup>
、<style module>
等。
主要区别:
- 是没有
<template>
标签:所有其他的根级内容都是 Markdown。 - 还要注意的是,所有标签都应该在前置frontmatter(
---
文件开头内容)之后放置
<script setup>
import { ref } from 'vue';
const count = ref(0)
</script>
## Markdown Content
The count is: {{ count }}
<button :class="$style.button" @click="count++">Increment</button>
<style module>
.button {
color: red;
font-weight: bold;
}
</style>
<script setup>
import { ref } from 'vue';
const count = ref(0)
</script>
## Markdown Content
The count is: {{ count }}
<button :class="$style.button" @click="count++">Increment</button>
<style module>
.button {
color: red;
font-weight: bold;
}
</style>
注意事项:
- 尽量减少使用
<style scoped>
,当前页面中的每个元素添加特殊的属性,这将显著增加页面的大小。如果需要本地范围的样式,建议使用<style module>
我们可以通过VuePress的runtime api获取一些信息,例如 userData
<script setup>
import { useData } from 'vitepress'
const { page } = useData()
</script>
<pre>{{ page }}</pre>
<script setup>
import { useData } from 'vitepress'
const { page } = useData()
</script>
<pre>{{ page }}</pre>
输出结果为:
{
"path": "/using-vue.html",
"title": "Using Vue in Markdown",
"frontmatter": {},
...
}
{
"path": "/using-vue.html",
"title": "Using Vue in Markdown",
"frontmatter": {},
...
}
使用组件
可以直接引入组件。 尽量不注册全局组件。
<script setup>
import CustomComponent from '../components/CustomComponent.vue'
</script>
# Docs
This is a .md using a custom component
<CustomComponent />
## More docs
...
<script setup>
import CustomComponent from '../components/CustomComponent.vue'
</script>
# Docs
This is a .md using a custom component
<CustomComponent />
## More docs
...
Escaping
防止渲染
- 使用span标签,配合 v-pre
- 段落可以使用
:::v-pre
This <span v-pre>{{ will be displayed as-is }}</span>
::: v-pre
{{ This will be displayed as-is }}
:::
This <span v-pre>{{ will be displayed as-is }}</span>
::: v-pre
{{ This will be displayed as-is }}
:::
代码块中的Unescape:使用 js-vue
,模板语法就会在代码块中渲染。
css 预处理
不需要为它们安装Vite特定的插件,但必须安装相应的预处理器本身。
# .scss and .sass
npm install -D sass
# .less
npm install -D less
# .styl and .stylus
npm install -D stylus
# .scss and .sass
npm install -D sass
# .less
npm install -D less
# .styl and .stylus
npm install -D stylus
使用:
<style lang="sass">
.title
font-size: 20px
</style>
<style lang="sass">
.title
font-size: 20px
</style>
参考文档
关于Vue SFCs:
指的是Vue的单文件组件,即将组件的HTML、CSS和JS代码打包到同一个文件中。SFCs在Vue项目中非常常见,它可以让组件的模板、样式和逻辑更加清晰、易于维护。通过使用SFCs,我们可以更方便地重用组件,提高代码的可读性和可扩展性。
参考: